/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2002-2006
* Sleepycat Software. All rights reserved.
*
* $Id: DatabaseEntry.java,v 1.1 2006/05/06 08:59:25 ckaestne Exp $
*/
package com.sleepycat.je;
import com.sleepycat.je.tree.TreeUtils;
/**
* Javadoc for this public class is generated
* via the doc templates in the doc_src directory.
*/
public class DatabaseEntry {
/* Currently, JE stores all data records as byte array */
private byte[] data;
private int dlen = 0;
private int doff = 0;
private int offset = 0;
private int size = 0;
private boolean partial = false;
public String toString() {
StringBuffer sb = new StringBuffer("<DatabaseEntry");
sb.append(" dlen=").append(dlen);
sb.append(" doff=").append(doff);
sb.append(" doff=").append(doff);
sb.append(" offset=").append(offset);
sb.append(" size=").append(size);
sb.append(">");
return sb.toString();
}
/*
* Constructors
*/
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public DatabaseEntry() {
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public DatabaseEntry(byte[] data) {
this.data = data;
if (data != null) {
this.size = data.length;
}
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public DatabaseEntry(byte[] data, int offset, int size) {
this.data = data;
this.offset = offset;
this.size = size;
}
/*
* Accessors
*/
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public byte[] getData() {
return data;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setData(byte[] data) {
this.data = data;
offset = 0;
size = (data == null) ? 0 : data.length;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setData(byte[] data, int offset, int size) {
this.data = data;
this.offset = offset;
this.size = size;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setPartial(int doff, int dlen, boolean partial) {
setPartialOffset(doff);
setPartialLength(dlen);
setPartial(partial);
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getPartialLength() {
return dlen;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setPartialLength(int dlen) {
this.dlen = dlen;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getPartialOffset() {
return doff;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setPartialOffset(int doff) {
this.doff = doff;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public boolean getPartial() {
return partial;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setPartial(boolean partial) {
this.partial = partial;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getOffset() {
return offset;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setOffset(int offset) {
this.offset = offset;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getSize() {
return size;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setSize(int size) {
this.size = size;
}
/**
* Dumps the data as a byte array, for tracing purposes
*/
String dumpData() {
return TreeUtils.dumpByteArray(data);
}
/**
* Compares the data of two entries for byte-by-byte equality.
*
* <p>In either entry, if the offset is non-zero or the size is not equal
* to the data array length, then only the data bounded by these values is
* compared. The data array length and offset need not be the same in both
* entries for them to be considered equal.</p>
*
* <p>If the data array is null in one entry, then to be considered equal
* both entries must have a null data array.</p>
*
* <p>If the partial property is set in either entry, then to be considered
* equal both entries must have the same partial properties: partial,
* partialOffset and partialLength.
*/
public boolean equals(Object o) {
if (!(o instanceof DatabaseEntry)) {
return false;
}
DatabaseEntry e = (DatabaseEntry) o;
if (partial || e.partial) {
if (partial != e.partial ||
dlen != e.dlen ||
doff != e.doff) {
return false;
}
}
if (data == null && e.data == null) {
return true;
}
if (data == null || e.data == null) {
return false;
}
if (size != e.size) {
return false;
}
for (int i = 0; i < size; i += 1) {
if (data[offset + i] != e.data[e.offset + i]) {
return false;
}
}
return true;
}
/**
* Returns a hash code based on the data value.
*/
public int hashCode() {
int hash = 0;
if (data != null) {
for (int i = 0; i < size; i += 1) {
hash += data[offset + i];
}
}
return hash;
}
}